package utils

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/qiniu/go-sdk/v7/auth"
	"github.com/qiniu/go-sdk/v7/storage"
	"goadmin/config"
	"time"
)

type QiniuResponse struct {
	Token  string `json:"token"`
	Key    string `json:"key"`
	Domain string `json:"domain"`
}

// 生成一次性上传凭证
func GenerateQiniuToken(c *gin.Context) (interface{}, error) {
	// 1. 参数
	suffix := c.Query("suffix") // 前端传文件后缀，如 jpg
	if suffix == "" {
		return false, fmt.Errorf("缺少文件后缀")
	}

	// 2. 生成唯一 key（按需调整路径规则）
	key := fmt.Sprintf("goods/%s/%d.%s",
		time.Now().Format("060102"), // 240930
		time.Now().UnixNano()/1e6,   // 毫秒时间戳
		suffix)
	// 3. 构建上传策略（含 scope、过期）
	putPolicy := storage.PutPolicy{
		Scope:   fmt.Sprintf("%s:%s", config.Qiniu.Bucket, key), // 指定 key 上传
		Expires: uint64(3600),
	}
	mac := auth.New(config.Qiniu.AccessKey, config.Qiniu.SecretKey)
	upToken := putPolicy.UploadToken(mac)
	resp := QiniuResponse{
		Token:  upToken,
		Key:    key,
		Domain: config.Qiniu.Domain,
	}
	return resp, nil
}
